package com.chenyaowei.web.controller.cart;


import com.chenyaowei.cart.service.ICartService;
import com.chenyaowei.cart.vo.CartVO;
import com.chenyaowei.common.core.controller.BaseController;
import com.chenyaowei.common.core.domain.AjaxResult;
import com.chenyaowei.common.exception.ServiceException;
import com.chenyaowei.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author 陈耀威
 * @description 购物车，修改频繁，直接存redis。数据持久性由持久化策略以及redis机群保证或者定时同步到数据库。就算数据丢失，影响也不大。
 * @date 2023年12月05日
 * @version: 1.0
 */
@RestController
@RequestMapping("/cart")
public class CartController extends BaseController {

    @Autowired
    private ICartService cartService;

    /**
     * 修改购物项数量
     * @param skuId
     * @param num
     */
    @PutMapping("/countItem/{skuId}/{num}")
    public void countItem(@PathVariable("skuId") Long skuId, @PathVariable("num") Integer num){
        cartService.changeCountItem(skuId,num);
    }

    /**
     * 选中商品
     * @param skuId
     * @param checked 选中：1，未选中：0
     */
    @PutMapping("/checkItem/{skuId}/{checked}")
    public void checkedItem(@PathVariable("skuId") Long skuId,
                            @PathVariable("checked") Integer checked){
        cartService.checkedItem(skuId,checked);
    }

    /**
     * 移除商品项
     *
     * @return
     */
    @DeleteMapping("/{skuId}")
    public AjaxResult deleteItem(@PathVariable("skuId") Long skuId){
        return toAjax(cartService.deleteItem(skuId).intValue());
    }


    /**
     * 添加商品到购物车
     *
     * @return
     */
    @PostMapping("/{skuId}/{num}")
    public AjaxResult addItem(@PathVariable("skuId") Long skuId, @PathVariable("num") Integer num, @RequestHeader(value = "Authorization", required = false) String token){
        if (StringUtils.isEmpty(token)){
            throw new ServiceException("请先登录");
        }
        return cartService.addItem(skuId, num) ? success("添加成功") : error("添加失败");
    }

    /**
     * 获取购物车信息
     *
     * @return
     */
    @GetMapping
    public AjaxResult getCart() {
        CartVO cartVO = cartService.getCart();
        return success(cartVO);
    }

}
